package Testdmo4;

import java.nio.file.FileAlreadyExistsException;
import java.util.Arrays;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:周次煜
 * Date: 2024-03-17
 * Time：16:03
 */













//class Dog {
//    public void bark() {
//        System.out.println("woof");
//    }
//
//    public void bark(int num) {
//        for (int i = 0; i < num; i++) {
//            System.out.print("woof ");
//        }
//    }
//}
//
//
//class Hound extends Dog {
//    public void sniff() {
//        System.out.println("sniff");
//    }
//
//    @Override
//    public void bark() {
//        System.out.println("bowl");
//    }
//}
//
//
//class Test {
//    public static void main(String[] args) {
//        Hound hound=new Hound();
//        hound.bark();
//
//        Dog dog=new Dog();
//        dog.bark(5);
//    }
//}


//class Test {
//    public static void main(String[] args) {
//        Animal animal1=new  Cat("小喵",14);
//        animal1.eat();
//
//        Animal animal2=new Dog("小汪",18);
//        animal2.eat();
//    }
//}


//class TestAnimal {
//
//    // 2. 方法传参：形参为父类型引用，可以接收任意子类的对象
//    public static void eatFood(Animal a){
//        a.eat();
//    }
//
//    // 3. 作返回值：返回任意子类对象
//    public static Animal buyAnimal(String var){
//        if("狗".equals(var) ){
//            return new Dog("狗狗",1);
//        }else if("猫" .equals(var)){
//            return new Cat("猫猫", 1);
//        }else{
//            return null;
//        }
//    }
//    public static void main(String[] args) {
//
//
//        // 1. 直接赋值：子类对象赋值给父类对象
//        Animal cat = new Cat("元宝",2);
//
//        Dog dog = new Dog("小七", 1);
//        eatFood(cat);
//        eatFood(dog);
//
//        Animal animal = buyAnimal("狗");
//        animal.eat();
//
//        animal = buyAnimal("猫");
//        animal.eat();
//    }
//}


//class TestAnimal {
//    public static void main(String[] args) {
//        Cat cat = new Cat("元宝",2);
//        Dog dog = new Dog("小七", 1);
//// 向上转型
//        Animal animal = cat;
//        animal.eat();
//        animal = dog;
//        animal.eat();
//
//        // 编译失败，编译时编译器将animal当成Animal对象处理
//        // 而Animal类中没有bark方法，因此编译失败
//        // animal.bark();
//
//        // 向上转型
//        // 程序可以通过编程，但运行时抛出异常---因为：animal实际指向的是狗
//        // 现在要强制还原为猫，无法正常还原，运行时抛出：ClassCastException
//        cat = (Cat)animal;
//        cat.eat();
//
//        // animal本来指向的就是狗，因此将animal还原为狗也是安全的
//        dog = (Dog)animal;
//        dog.eat();
//    }
//}


//class TestAnimal {
//    public static void main(String[] args) {
//        Cat cat = new Cat("元宝",2);
//        Dog dog = new Dog("小七", 1);
//// 向上转型
//        Animal animal = cat;
//        animal.eat();
//        animal = dog;
//        animal.eat();
//        if(animal instanceof Cat){
//            cat = (Cat)animal;
//            cat.mew();
//        }
//        if(animal instanceof Dog){
//            dog = (Dog)animal;
//            dog.bark();
//        }
//    }
//}



////
//class Animal {
//    String name;
//    int age;
//
//    public  Animal (String name,int age) {
//        this.name=name;
//        this.age=age;
//    }
//        public void eat() {
//            System.out.println(name+"吃饭");
//        }
//
//}
//
//
//class Cat extends Animal {
//
//    public Cat(String name, int age) {
//        super(name, age);
//    }
//
//    @Override
//    public void eat() {
//        System.out.println(super.name+"吃鱼~~~~~");
//    }
//
//    public void mew() {
//        System.out.println(super.name+"正在mew~~~~");
//    }
//}
//
//
//class Dog extends Animal {
//
//    public Dog(String name, int age) {
//        super(name, age);
//    }
//
//    @Override
//    public void eat() {
//        System.out.println(super.name+"吃骨头~~~~");
//    }
//
//    public void bark() {
//        System.out.println(super.name+"正在bark~~~~");
//    }
//}
//
// class TestAnimal {
//
//
//        // 编译器在编译代码时，并不知道要调用Dog 还是 Cat 中eat的方法
//        // 等程序运行起来后，形参a引用的具体对象确定后，才知道调用那个方法
//        // 注意：此处的形参类型必须时父类类型才可以
//public static void eat(Animal a){
//
//        a.eat();
//    }
//public static void main(String[] args) {
//    Cat cat = new Cat("元宝", 2);
//    Dog dog = new Dog("小七", 1);
//    eat(cat);
//    eat(dog);
//}
//
//}



//class Test9 {
//    public static int sum(int x,int y) {
//        return x+y;
//    }
//
//    public static double sum (double x,double y,double z) {
//        return x+y+z;
//    }
//    public static void main(String[] args) {
//
//        System.out.println(sum(2, 6));
//
//        System.out.println(sum(1.2, 3.5, 9.3));
//    }
//}


//class Shape {
//    //属性....
//    public void draw() {
//        System.out.println("画图形！");
//    }
//}
//class Rect extends Shape{
//    @Override
//    public void draw() {
//        System.out.println("♦");
//    }
//}
//class Cycle extends Shape{
//    @Override
//    public void draw() {
//        System.out.println("●");
//    }
//}


//class Test {
//    public static void drawShapes() {
//        Rect rect = new Rect();
//        Cycle cycle = new Cycle();
//        Flower flower = new Flower();
//        String[] shapes = {"cycle", "rect", "cycle", "rect", "flower"};
//        for (String shape : shapes) {
//            if (shape.equals("cycle")) {
//                cycle.draw();
//            } else if (shape.equals("rect")) {
//                rect.draw();
//            } else if (shape.equals("flower")) {
//                flower.draw();
//            }
//        }
//    }
//
//    public static void main(String[] args) {
//        drawShapes();
//    }
//}

//class Shape {
//    //属性....
//    public void draw() {
//        System.out.println("画图形！");
//    }
//}
//class Rect extends Shape{
//    @Override
//    public void draw() {
//        System.out.println("♦");
//    }
//}
//class Cycle extends Shape{
//    @Override
//    public void draw() {
//        System.out.println("●");
//    }
//}
//
//class Flower extends Shape{
//    @Override
//    public void draw() {
//        System.out.println("❀");
//    }
//}
//
//
//class Test {
//    public static void drawShapes() {
//// 我们创建了一个 Shape 对象的数组.
//        Shape[] shapes = {new Cycle(), new Rect(), new Cycle(),
//                new Rect(), new Flower()};
//        for (Shape shape : shapes) {
//            shape.draw();
//        }
//    }
//
//    public static void main(String[] args) {
//        drawShapes();
//    }
//}


//class B {
//    public B() {
//// do nothing
//        func();
//    }
//    public void func() {
//        System.out.println("B.func()");
//    }
//}
//class D extends B {
//    private int num = 1;
//    @Override
//    public void func() {
//        System.out.println("D.func() " + num);
//    }
//}
//
//class Test {
//    public static void main(String[] args) {
//        D d = new D();
//    }
//}



class  Test {
    public static void func1(int []a) {
        try {
           int sz= a.length;
            System.out.println(sz);
        } catch (NullPointerException e) {
            e.printStackTrace();
            System.out.println("空指针异常！");
        } finally {
            System.out.println("继续执行");
        }
    }

    public static void main1(String[] args) {
        int [] array= null;
        func1(array);
    }

    public static void func2() {
        int []array=new int[3];

        try {
            System.out.println(array[3]);
            int s=10/0;
        }catch (ArithmeticException e ) {
            e.printStackTrace();
            System.out.println("算术异常！");
        } catch (ArrayIndexOutOfBoundsException e) {
            e.printStackTrace();
            System.out.println("数组越界异常");
        } catch (NullPointerException e) {
                e.printStackTrace();
            System.out.println("空指针异常");
        } finally {
            array=null;
        }

        System.out.println("程序正在运行中");
    }


    public static void main(String[] args) {
        func2();

    }
}

